package beanstao.util.setting;

import beanstao.util.log.ILog;
import beanstao.util.log.LogHelper;

/**
 * 实现单个配置节点的配置类
 * 
 * @author beanstao@google.com 
 * 
 * @param <T>
 */
public abstract class Setting<T> implements ILog
{
	private boolean _IsModified;

	public Setting()
	{
	}

	/**
	 * 实例中的数据是否修改
	 */
	public boolean isModified()
	{
		return _IsModified;
	}

	/**
	 * 本Setting是否可以动态加载，即支持动态更新，当配置文件改变后会自动重新加载
	 */
	public boolean canDynamicLoad()
	{
		return false;
	}

	public void loading(T t)
	{
		if (this.canDynamicLoad())
			this.fillSettingData(t);
	}

	/**
	 * 核心方法:填充本类型的具体数据。
	 * 
	 * @param element
	 */
	protected abstract void fillSettingData(T element);

	// = 日志接口(ILog)的实现 ============

	@Override
	public void logDebug(Object message)
	{
		LogHelper.logDebug(this, message);
	}

	@Override
	public void logDebug(Object message, Throwable t)
	{
		LogHelper.logDebug(this, message, t);
	}

	@Override
	public void logError(Object message)
	{
		LogHelper.logError(this, message);
	}

	@Override
	public void logError(Object message, Throwable t)
	{
		LogHelper.logError(this, message, t);
	}

	@Override
	public void logInfo(Object message)
	{
		LogHelper.logInfo(this, message);
	}

	@Override
	public void logInfo(Object message, Throwable t)
	{
		LogHelper.logInfo(this, message, t);
	}

	@Override
	public void logWarn(Object message)
	{
		LogHelper.logWarn(this, message);
	}

	@Override
	public void logWarn(Object message, Throwable t)
	{
		LogHelper.logWarn(this, message, t);
	}

}
